/**
 * 管理员控制器
 */
const { User } = require('../models');
const { generateToken } = require('../config/jwt');

/**
 * 管理员登录
 */
const login = async (req, res) => {
  try {
    const { username, password } = req.body;
    // 参数验证
    if (!username || !password) {
      return res.status(400).json({
        code: 400,
        message: '用户名和密码不能为空',
        data: null
      });
    }
    
    // 查找管理员用户
    // 注意：实际项目中应该有单独的Admin模型，这里简化处理
    const admin = await User.findOne({
      where: { 
        username,
        role: 'admin'  // 确保是管理员角色
      }
    });
    
    // 用户不存在或密码错误
    if (!admin || admin.password !== password) {
      return res.status(401).json({
        code: 401,
        message: '用户名或密码错误',
        data: null
      });
    }
    
    // 检查管理员状态
    if (admin.status !== 1) {
      return res.status(403).json({
        code: 403,
        message: '账号已被禁用',
        data: null
      });
    }
    
    // 生成JWT Token
    const token = generateToken(admin);
    
    // 返回用户信息（不包含密码）
    const adminInfo = {
      id: admin.id,
      username: admin.username,
      nickname: admin.nickname,
      avatar: admin.avatar,
      role: admin.role,
      permissions: admin.permissions,
      created_at: admin.created_at
    };
    res.status(200).json({
      code: 200,
      message: '登录成功',
      data: {
        token,
        userInfo: adminInfo
      }
    });
  } catch (error) {
    console.error('管理员登录异常:', error);
    res.status(500).json({
      code: 500,
      message: '登录失败，请稍后重试',
      data: null
    });
  }
};

/**
 * 获取管理员信息
 */
const getAdminInfo = async (req, res) => {
  try {
    const adminId = req.user.id;
    
    // 查找管理员用户
    const admin = await User.findOne({
      where: { 
        id: adminId,
        role: 'admin'  // 确保是管理员角色
      }
    });
    
    if (!admin) {
      return res.status(404).json({
        code: 404,
        message: '管理员不存在',
        data: null
      });
    }
    
    // 返回管理员信息（不包含密码）
    const adminInfo = {
      id: admin.id,
      username: admin.username,
      nickname: admin.nickname,
      avatar: admin.avatar,
      role: admin.role,
      permissions: admin.permissions,
      created_at: admin.created_at
    };
    
    res.status(200).json({
      code: 200,
      message: '获取管理员信息成功',
      data: adminInfo
    });
  } catch (error) {
    console.error('获取管理员信息异常:', error);
    res.status(500).json({
      code: 500,
      message: '获取信息失败，请稍后重试',
      data: null
    });
  }
};

/**
 * 管理员登出
 */
const logout = async (req, res) => {
  // 由于使用JWT，服务端无需处理登出，只需前端清除token
  res.status(200).json({
    code: 200,
    message: '登出成功',
    data: null
  });
};

module.exports = {
  login,
  getAdminInfo,
  logout
}; 